package demo2.common.util;

import java.util.Base64;
import java.util.UUID;

/**
 * 描述：UUID生成器
 * 
 * <pre>
 * HISTORY
 * ****************************************************************************
 *  ID   DATE           PERSON          REASON
 *  1    2016年6月24日      80002031         Create
 * ****************************************************************************
 * </pre>
 * 
 * @author 80002031
 * @since
 */
public class UUIDGenerator {

    private UUIDGenerator() {}

    public static String generate() {
        return gen();
    }

    /**
     * @Description 生成UUID
     * @Param
     * @Date 2016年10月20日
     * @Return
     */
    private static String gen() {
        UUID uuid = UUID.randomUUID();
        byte[] data = new byte[24];
        write(data, 0, System.currentTimeMillis());
        write(data, 8, uuid.getMostSignificantBits());
        write(data, 16, uuid.getLeastSignificantBits());
        String id = Base64.getEncoder().encodeToString(data);
        return id;
    }

    /**
     * @Description 进行移位计算
     * @Param
     * @Date 2016年10月20日
     * @Return
     */
    private static void write(byte[] data, int start, long value) {
        data[start + 0] = (byte) (value >>> 56);
        data[start + 1] = (byte) (value >>> 48);
        data[start + 2] = (byte) (value >>> 40);
        data[start + 3] = (byte) (value >>> 32);
        data[start + 4] = (byte) (value >>> 24);
        data[start + 5] = (byte) (value >>> 16);
        data[start + 6] = (byte) (value >>> 8);
        data[start + 7] = (byte) (value >>> 0);
    }
}
